home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-05-18 | 42.3 KB | 964 lines | [TEXT/ttxt] |
- Name
-
- EXT_multitexture
-
- Name Strings
-
- GL_EXT_multitexture
-
- Version
-
- $Date: 1998/05/12 23:52:21 $ $Revision: 1.18 $
-
- Number
-
- 116
-
- Dependencies
-
- OpenGL 1.1 is required
- EXT_texture3D affects the definition of this extension.
- SGIS_texture4D affects the definition of this extension.
- SGIS_texture_border_clamp affects the definition of this extension.
- SGI_texture_color_table affects the definition of this extension.
- SGIS_texture_edge_clamp affects the definition of this extension.
- SGIX_texture_add_env affects the definition of this extension.
- SGIS_texture_filter4 affects the definition of this extension.
- SGIS_texture_lod affects the definition of this extension.
- SGIX_texture_lod_bias affects the definition of this extension.
- SGIX_texture_scale_bias affects the definition of this extension.
- SGIS_texture_select affects the definition of this extension.
- SGIS_detail_texture affects the definition of this extension.
- SGIS_sharpen_texture affects the definition of this extension.
- SGIX_shadow affects the definition of this extension.
- SGIX_shadow_ambient affects the definition of this extension.
- SGIX_clipmap affects the definition of this extension.
- SGIS_point_line_texgen affects the definition of this extension.
-
- Overview
-
- This extension adds support for multiple active textures. The texture
- capabilities are symmetric for all active textures. Any texture capability
- extension supported for one texture must be supported for all active
- textures. Each active texture has its own state vector which includes
- texture image and filtering parameters and texture environment application.
-
- The texture environments are applied in a pipelined fashion whereby the
- output of one texture environment is used as the input fragment color for
- the texture environment for the next active texture. Changes to texture
- state other than texture coordinates are routed through a selector which
- controls which instance of texture state is affected.
-
- +-----+
- Cf ----->| | +-----+ pipelined texture
- | TE0 |--->| | environment
- Ct0 ----->| | | TE1 | +-----+
- +-----+ | |--->| |
- Ct1 ---------------->| | | TE2 | +-----+
- +-----+ | |--->| |
- Ct2 --------------------------->| | | TE3 |
- +-----+ | |--> cf'
- Ct3 -------------------------------------->| |
- +-----+
- .
- .
- .
-
- Ct<i> = texture color from texture lookup <i>
- Cf = fragment color
- TE = texture environment
-
- Texture coordinate set, texture coordinate evaluator state, texture
- generation function, and texture matrix are replicated independently of
- the texture rasterization state and may differ in number from the
- number of textures which can be active during rasterization.
- Post-transform texture coordinates sets are associated with a texture
- rasterization unit by binding them to a texture environment and they may
- be multicast to several texture rasterization units.
-
- The specification is written using four active textures and four
- sets of texture coordinates though the actual number supported is
- implementation dependent and can be larger or smaller than four.
-
- Issues
-
- * MultiTexCoord is an annoying name
-
- * alternatives for supplying fine grain texcoord
-
- 1. Tex<k>Coord<n><T>[v|f](<T> data);
-
- a. efficient, no error checking required
- d. adds *a lot* of new commands
-
- 2. MultiTexCoord<n><T>[v|f](enum target, <T> data);
-
- a. only a small number of commands added
- a. can be fairly efficient (may need hw tweak)
- d. needs range checking for <target>
-
- 3. reuse TexCoord command and add SelectTextureCoordSetEXT(enum target)
- to control routing
-
- a. only add one new commands
- d. adds a lot of function call overhead when using multiple
- textures
- d. need to range check <target>
-
- * seems a little hacky to have SelectTextureEXT control texture matrix
- since that is part of transform state and to have it control evaluator
- state yet SELECTED_TEXTURE itself is part of texture state.
-
- * SelectTextureEXT probably should not affect client state such as
- the vertex array state.
-
- it doesn't any more
-
- * mechanism to replicate input texcoords across multiple texture paths
- could be done with a pre-transform multicast or post-transform
- multicast.
-
- done using TEXTURE_ENV_COORD_SET_EXT texture parameter
- which is a post-transform mechanism.
-
- RESOLVED: leave the coord source binding separate from
- the texture object state => needs a new command to set it.
-
- * need proxy/macro object to handle resource constraints
- save for another extension?
-
- * still need a way to route textures to lighting block :(
-
- defined in light_texture.spec
-
- * should there be a post-filter colortable per texture?
-
- * should the number of textures and the number of texture
- coordinate paths be decoupled?
- RESOLVED: yes
- There are some issues with this. We choose to break
- texture state into 3 pieces:
- 1. client state deal with issuing texture coordinates
- from the application
- 2. transform state which includes texgen, texture
- matrix, evaluation maps, and texture coordinate
- retrieval from Gets and Feedback.
- 3. rasterization state which includes texture
- images, filter parameters and environment.
- 2 & 3 are both server state. there is an implication
- that 1 and 2 are a little more tightly coupled and
- equal in number but we need to keep the client
- state separate.
- There is some clumsyness with referring to the 2nd
- group of state as transform state. There is a problem
- that the texgen state is part of the texture state
- used in PushAttrib and PopAttrib so some finessing
- is required.
-
- * special treatment of name 0?
-
- RESOLVED: no
-
- * more texture environment functions, SUBTRACT, ...?
- leading candidates are SUBTRACT and REVERSE_SUBTRACT
- could also make a new version of environment which is
- similar to blending.
-
- RESOLVED: new environment, see texture_env.spec
-
- * more general combination of texture results?
-
- RESOLVED: do them in add-on specs
-
- * allow texture environment computation to do something
- even when texture is disabled. This contradicts the current
- specification of texturing (the difference would show
- up in the REPLACE environment), so we redefine this
- behavior in a new environment (see texture_env.spec)
-
- * support for interleaved arrays
-
- add a command which acts as a multiplier on the current
- interleaved array token causing the texture coordinate
- array to have <n> contiguous texture coords of the same
- type and format.
-
- * some clarifications:
-
- SelectTextureCoordSetEXT affects client state only and
- affects the commands TexCoord<n>{T}[v], TexCoordPointer,
- EnableClientState, and DisableClientState. Display lists
- contain texture coordinates for which the binding is fully
- resolved to one of TEXTURE0_EXT .. TEXTURE<n>_EXT.
-
- I chose to remove MultiTexCoordPointerEXT as it was difficult
- to also include tokens which would make it possible to call
- Enable/DisableClientState with a token corresponding to the
- appropriate texture coordinate set, so SelectTextureCoordSetEXT
- is required to manipulate the array state. To maintain symmetry,
- I made all commands use SelectTextureCoordSetEXT and the
- MultiTexCoord<n>{T}[v]EXT commands are added to help with
- performance. An alternative would be to have both
- MultiTexCoordPointerEXT and add new tokens
- TEXTURE_COORD_ARRAY0_EXT .. TEXTURE_COORD_ARRAY<n>_EXT and
- not give TEXTURE_COORD_ARRAY0_EXT the same value as
- TEXTURE_COORD_ARRAY, so that we can have the relationship
- TEXTURE_COORD_ARRAY<i>_EXT = TEXTURE_COORD_ARRAY0_EXT+i.
- This still might cause some confusion/asymmetry if the <target>
- parameter of MultiTexCoordPointerEXT/MultiTexCoord<n>{T}[v]EXT
- is TEXTURE0_EXT .. TEXTURE<n>_EXT but EnableClientState/
- DisableClientState use TEXTURE_COORD_ARRAY0_EXT ..
- TEXTURE_COORD_ARRAY<n>_EXT
-
-
-
- New Procedures and Functions
-
- void MultiTexCoord{1234}{sifd}EXT(enum target, T coords);
- void MultiTexCoord{1234}{sifd}vEXT(enum target, T coords);
-
- void InterleavedTextureCoordSetsEXT(int factor);
-
- void SelectTextureEXT(enum target);
-
- void SelectTextureCoordSetEXT(enum target);
-
- void SelectTextureTransformEXT(enum target);
-
- New Tokens
-
- Accepted by the <pname> parameters of GetBooleanv, GetIntegerv,
- GetFloatv, and GetDoublev:
-
- SELECTED_TEXTURE_EXT 0x83C0
- SELECTED_TEXTURE_COORD_SET_EXT 0x83C1
- SELECTED_TEXTURE_TRANSFORM_EXT 0x83C2
- MAX_TEXTURES_EXT 0x83C3
- MAX_TEXTURE_COORD_SETS_EXT 0x83C4
-
- Accepted by the <pname> parameter of TexEnvi, TexEnvf,
- TexEnviv, TexEnvfv, GetTexEnviv, and GetTexEnvfv:
-
- TEXTURE_ENV_COORD_SET_EXT 0x83C5
-
- Accepted by the <target> parameter of SelectTextureEXT,
- SelectTextureTransformEXT, SelectTextureCoordSetEXT,
- MultiTexCoord<n>{T}[v]EXT, and the <param> of TexParameteri and
- TexParameterf, and the <params> parameter of TexParameteriv, and
- TexParameterfv:
-
- TEXTURE0_EXT 0x83C6
- TEXTURE1_EXT 0x83C7
- TEXTURE2_EXT 0x83C8
- TEXTURE3_EXT 0x83C9
- <reserve enums for 32>
-
- Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
-
- Section 2.6 Begin/End Paradigm
-
- <amend paragraph 2 & 3>
-
- Each vertex is specified with two, three, or four coordinates. In
- addition, a current normal, current texture coordinate set, and current
- color may be used in processing each vertex. Normals are used by the GL in
- lighting calculations; the current normal is a three-dimensional vector
- that may be set by sending three coordinates that specify it. Texture
- coordinates determine how a texture image is mapped onto a primitive.
- Multiple sets of texture coordinates may be used to specify how multiple
- texture images are mapped onto a primitive. The number of texture
- coordinate sets supported is implementation dependent but must be at least
- one.
-
- A color is associated with each vertex as it is specified. This associated
- color is either the current color or a color produced by lighting
- depending on whether or not lighting is enabled. Texture coordinates are
- similarly associated with each vertex. Multiple sets of texture coordinates
- may be associated with a vertex. Figure 2.2 summarizes the association of
- auxiliary data with a transformed vertex to produce a processed vertex.
-
- <amend figure 2.2 to include multiple texcoord processing blocks
- (current texcoords, texgen, texture matrix)>
-
- <amend paragraph 6>
- Before a color has been assigned to a vertex, the state required by a vertex
- is the vertex's coordinates, the current normal, and the current texture
- coordinate sets. Once color has been assigned, however, the current normal
- is no longer needed. Because color assignment is done vertex-by-vertex, a
- processed vertex comprises the vertex's coordinates, its assigned color,
- and its texture coordinate sets.
-
-
-
- Section 2.7 Vertex Specifications <texture coordinates>
-
- <amend paragraph 2>
-
- Current values are used in associating auxiliary data with a vertex
- as described in section 2.6. A current value may be changed at any time
- by issuing an appropriate command. The commands
-
- void TexCoord{1234}{sifd}(T coords);
- void TexCoord{1234}{sifd}v(T coords);
-
- specify the current homogeneous texture coordinates, named s,t,r, and q.
- The TexCoord1 family of commands set the s coordinate to the provided
- single argument while setting t and r to 0 and q to 1. Similarly,
- TexCoord2 sets s and t to the specified values, r to 0, and q to 1;
- TexCoord3 sets s, t, and r, with q set to 1, and TexCoord4 sets all four
- texture coordinates.
-
- Implementations may support more than 1 set of texture
- coordinates. The MultiTexCoord family of commands takes the
- coordinate set to be modified as the <target> parameter. The
- <target> parameter is one of TEXTURE0_EXT through
- TEXTURE3_EXT. If a <target> parameter greater than the number of
- supported coordinate sets is specified, the command has no effect.
- The command
-
- void SelectTextureCoordSetEXT(enum target);
-
- is used to change the texture coordinate set modified by the TexCoord*
- family of commands. <target> is one of TEXTURE0_EXT through TEXTURE3_EXT
- corresponding to the texture coordinate set to be modified by the TexCoord
- commands. The current coordinate set selection is part of client state rather
- than server state.
-
-
- Section 2.8 Vertex Arrays
-
- <amend paragraph 1>
-
- The vertex specification commands in section 2.7 accept data in almost any
- format, but their use requires many command executions to specify even
- simple geometry. Vertex data may also be placed in arrays that are stored
- in the client's address space. Blocks of data in these arrays may be used
- to specify multiple geometric primitives through the execution of a single
- GL command. The client may specify 6 or more arrays at once: one each to
- store vertex coordinates, edge flags, colors, color indices, normals and
- one or more texture coordinate sets. The commands
-
- void EdgeFlagPointer(sizei stride, void *pointer);
- void VertexPointer(int size, enum type, sizei stride, void *pointer);
- void ColorPointer(int size, enum type, sizei stride, void *pointer);
- void IndexPointer(enum type, sizei stride, void *pointer);
- void NormalPointer(enum type, sizei stride, void *pointer);
- void TexCoordPointer(int size, enum type, sizei stride, void *pointer);
-
- ...
-
- <insert this paragraph> between paragraph 2 & 3>
-
- In implementations which support more than one set of texture coordinates,
- the command SelectTextureCoordSetEXT is used to select the vertex array
- parameters to be modified by the TexCoordPointer command and the array
- affected by client state enable and disable commands with the
- TEXTURE_COORD_ARRAY parameter.
-
- <modify the section on interleaved arrays as follows>
-
- The commands
-
- void InterleavedArrays(enum format, sizei stride,
- void *pointer) ;
-
- void InterleavedTextureCoordSetsEXT(int factor) ;
-
- efficiently initializes the six arrays and their enables to one of 14
- configurations. <format> must be one 14 symbolic constants: V2F, V3F,
- C4UB_V2F, C4UB_V3F, C3F_V3F, N3F_V3F, C4F_N3F_V3F, T2F_V3F, T4F_V4F,
- T2F_C4UB_V3F, T2F_C3F_V3F, T2F_N3F_V3F, T2F_C4F_N3F_V3F, T4F_C4F_N3F_V4F.
- <factor> is an integer between 1 and SELECTED_TEXTURE_COORD_SET_EXT
- and specifies how many texture coordinate sets are enabled as part
- of the InterleavedArrays command.
-
- The effect of
-
- InterleavedArrays(format, stride, pointer);
- InterleavedTextureCoordSetsEXT(factor);
-
- is the same as the effect of the command sequence
-
- <copy command sequence from 1.1 spec, but change the part dealing
- with texture coords to>
-
- GetIntegerv(SELECTED_TEXTURE_COORD_SET_EXT, &x);
- if (<et>) {
- for(i = 0; i < factor; i++) {
- SelectTextureCoordSetEXT(TEXTURE0_EXT+i);
- EnableClientState(TEXTURE_COORD_ARRAY);
- TexCoordPointer(st, FLOAT, str, <pointer>+i*pc);
- }
- for(i = factor; i < MAX_TEXTURE_COORD_SETS_EXT; i++) {
- SelectTextureCoordSetEXT(TEXTURE0_EXT+i);
- DisableClientState(TEXTURE_COORD_ARRAY);
- }
- } else {
- for(i = 0; i < MAX_TEXTURE_COORD_SETS_EXT; i++) {
- SelectTextureCoordSetEXT(TEXTURE0_EXT+i);
- DisableClientState(TEXTURE_COORD_ARRAY);
- }
- }
- SelectTextureCoordSetEXT(x);
- pc *= factor;
-
-
- If the number of supported is texture coordinate sets,
- MAX_TEXTURE_COORD_SETS_EXT, is <k>, then the client state require to
- implement vertex arrays consists of five plus <k> boolean values, five
- plus <k> integer stride values, four plus <k> constants representing array
- types, and three plus <k> integers representing values per element. In the
- initial state, the boolean values are each disabled, the memory pointers
- are each null, the strides are each zero, the array types are each FLOAT,
- and the integers representing values per element are each four.
-
-
- Section 2.10.2 Matrices
-
- <amend paragraph 8 texture matrix>
-
- There is another 4x4 matrix that is applied to texture coordinates.
- This matrix is applied as
-
- | m1 m5 m9 m13 | |s|
- | m2 m6 m10 m14 | |t| ,
- | m3 m7 m11 m15 | |r|
- | m4 m8 m12 m16 | |q|
-
- where the left matrix is the current texture matrix. The Matrix is applied
- to the coordinates resulting from texture coordinate generation which
- (which may simply be the current texture coordinates), and the resulting
- transformed coordinates become the texture coordinates associated with a
- vertex. Setting the matrix mode to TEXTURE causes the already described
- matrix operations to apply to the texture matrix stack.
-
- For implementations which support more than one set of texture coordinates,
- there is a corresponding texture matrix stack for each coordinate set. Each
- stack has the same depth. The texture matrix stack which is affected by the
- matrix operations is set using the SelectTextureTransformEXT command.
-
- There is a stack of matrices for each of the matrix modes. For MODELVIEW
- mode, the stack depth is at least 32 (that is, there is a stack of at least
- 32 model-view matrices). For other modes, the depth is at least 2. Texture
- matrix stacks for all texture coordinate sets have the same depth.
-
- void PushMatrix( void );
-
- pushes the stack down by one, duplicating the current matrix in both the
- top of the stack and the entry below it.
-
- void PopMatrix( void );
-
- pops the top entry off of the stack, replacing the current matrix with the
- matrix that was the second entry in the stack. The pushing or popping
- takes place on the stack corresponding to the current matrix mode. Popping
- a matrix off a stack with only one entry generates the error STACK_UNDERFLOW;
- pushing a matrix onto a full stack generates STACK_OVERFLOW.
-
- When the current matrix mode is TEXTURE, the texture matrix stack corresponding
- to the currently selected textured is pushed or popped.
-
- The state required to implement transformations consists of a three-value
- integer indicating the current matrix mode, a stack of at least two 4x4
- matrices for PROJECTION and one stack of at least two 4x4 matrices for
- each set of texture coordinates, TEXTURE, as well as associated stack pointers,
- and a stack of at least 32 4x4 matrices with an associated stack pointer for
- MODELVIEW. Initially, there is only one matrix on each stack and all
- matrices are set to the identity. The initial matrix mode is MODELVIEW.
-
- Section 2.10.4 Generating texture coordinates
-
- <amend paragraph 4>
-
- The state required for texture coordinate generation for each set of
- texture coordinates supported by the implementation comprises a
- three-valued integer for each coordinate indicating coordinate generation
- mode, and a bit for each coordinate to indicate whether texture coordinate
- generation is enabled or disabled. In addition, four coefficients are
- required for the four coordinates for each of EYE_LINEAR and
- OBJECT_LINEAR. The initial state has the texture generation function
- disabled for all texture coordinates. The initial values of p_i for s
- except p_1 which is one; for t all the p_i are zero except p_2, which is
- 1. The values of p_i for r and q are all zero. These values of p_i apply
- for both the EYE_LINEAR and OBJECT_LINEAR versions. Initially all texture
- generation modes are EYE_LINEAR.
-
- Section 2.12 Current Raster Position
-
- <amend paragraph 2>
-
- The current raster position consists of three window coordinates x_w,
- y_w, and z_w, a clip coordinate w_c value, and eye coordinate distance,
- a valid bit, and associated data consisting op a color and texture
- coordinate sets. It is set using one of the RasterPos commands:
- ...
-
- <amend paragraph 5>
-
- The current raster position requires five single-precision floating-point
- values for its x_w, y_w, and z_w window coordinates, its w_c clip
- coordinate, and its eye coordinate distance, a single valid bit, a color
- (RGBA and color index), and texture coordinates for each set of texture
- coordinates supported by the implementation. In the initial state, the
- coordinates and texture coordinates and both (0,0,0,1), the eye coordinate
- distance is 0, the valid bit is set, the associated RGBA color is (1,1,1,1)
- and the associated color index is 1. In RGBA mode, the associated color
- index always has its initial value; in color index mode, the RGBA color
- always maintains its initial value.
-
-
- Additions to Chapter 3 of the 1.1 Specification (Rasterization)
-
- Section 3.8 Texturing
-
- <amend paragraphs 1 & 2>
-
- Texturing maps a portion of one or more specified images onto each
- primitive for which texturing is enabled. This mapping is accomplished by
- using the color of an image at the location indicated by a fragment's
- (s,t,r) coordinates to modify the fragment's RGBA color (r is currently
- ignored). An implementation may support texturing using more than one
- image at a time. In this case the fragment carries multiple sets of
- texture coordinates (s,t,r) which are used to index separate images to
- produce color values which are collectively used to modify the fragment's
- RGBA color. Texturing is specified only for RGBA mode; its use in color
- index mode is undefined. The following subsections (up to and including
- Section 3.8.5) specify the GL operation with a single texture and Section
- 3.8.6 specifies the details of how multiple textures interact.
-
- The GL provides a means to specify the details of how texturing of a
- primitive is effected. These details include specifications of the image to
- be texture mapped, the means by which the image is filtered when applied to
- the primitive, and the function that determines what RGBA value is produced
- given a fragment color and an image value.
-
-
- Section 3.8.4 Texture Objects
-
- <add this paragraph to the end of the section>
-
- The texture object name space is shared amongst all textures in multiple
- texture implementations. A texture object may be bound to more than one
- texture target simultaneously, though they must all be of the same type
- (e.g., TEXTURE_1D, TEXTURE_2D). After a texture object is bound, any GL
- operations on that target also affect any other target to which the same
- texture object is bound.
-
-
- Section 3.8.5 Texture Environments and Texture Functions
-
- <amend the second half of paragraph 1>
- The possible environment parameters are TEXTURE_ENV_MODE,
- TEXTURE_ENV_COLOR, and TEXTURE_ENV_COORD_SET_EXT. TEXTURE_ENV_MODE may be
- set to one of REPLACE, MODULATE, DECAL, or BLEND; TEXTURE_ENV_COLOR is set
- to an RGBA color by providing four single-precision floating-point values
- in the range [0,1](values outside this range are clamped to it). If
- integers are provided for TEXTURE_ENV_COLOR, then they are converted to
- floating-point as specified in Table 2.6 for signed integers.
- TEXTURE_ENV_COORD_SET_EXT may be set to one of TEXTURE0_EXT ..
- TEXTURE<n>_EXT where <n> is one less than the number of supported
- texture coordinate sets. If a floating-point value is provided, then it
- is rounded to the nearest integer.
-
- <insert before paragraph 3>
-
- The value of TEXTURE_ENV_COORD_SET_EXT specifies which set of fragment
- texture coordinates are used to determine the texture value used in
- the texture function. The same set of texture coordinates may
- be simultaneously used by multiple textures.
-
- <replace paragraph 3>
-
- The state required for the current texture environment consists of the
- four-valued integer indicating the texture function, four floating-
- point TEXTURE_ENV_COLOR values, and one MAX_TEXTURE_COORD_SETS_EXT-valued
- integer indicating the texture coordinate set binding. In the initial
- state, the texture function is given by MODULATE, TEXTURE_ENV_COLOR is
- (0,0,0,0), and texture coordinate set is TEXTURE0_EXT.
-
-
- Section 3.8.6 Texture Application <replace with this>
-
- Texturing is enabled or disabled using the generic Enable and Disable
- commands, respectively, with the symbolic constant TEXTURE_1D or TEXTURE_2D
- to enable the one-dimensional or two-dimensional texture, respectively. If
- both the one- and two-dimensional textures are enabled, the two-dimensional
- texture is used. If all texturing is disabled, a rasterized fragment is
- passed unaltered to the next stage of the GL (although its texture
- coordinates may be discarded). Otherwise, a texture value is found
- according to the parameter values of the currently bound texture image of
- the appropriate dimensionality using the rules given in sections 3.8.1 and
- 3.8.2. This texture value is used along with the incoming fragment in
- computing the texture function indicated by the currently bound texture
- environment. The result of this function replaces the incoming fragment's
- R, G, B, and A values. These are the color values passed to subsequent
- operations. Other data associated with the incoming fragment remain
- unchanged, except that the texture coordinates may be discarded.
-
- When multiple textures are supported, additional textures are each paired
- with an environment function. The second texture function is computed
- using the texture value from the second texture, the fragment resulting
- from the first texture function computation and the environment function
- currently bound to the second texture. If there is a third texture, the
- fragment resulting from the second texture function is combined with the
- third texture value using the environment function bound to the third
- texture and so on. Texturing is enabled and disabled individually for each
- texture. If texturing is disabled for one of the textures, then the
- fragment result from the previous stage is passed unaltered to the next
- stage.
-
-
- Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
- and the Framebuffer)
-
-
- Additions to Chapter 5 of the 1.1 Specification (Special Functions)
-
- Section 5.1 Evaluators
-
- <amend second part of paragraph 2 to indicate that the evaluator
- map modified is affected by SELECTED_TEXTURE_TRANSFORM_EXT when the
- the type parameter is one of the texture coordinates.>
-
- <amend paragraph 7>
-
- The evaluation of a defined map is enabled or disabled with Enable and
- Disable using the constant corresponding to the map as described
- above. In implementations which support multiple texture coordinates the
- affected texture evaluator map is further qualified by the value of
- SELECTED_TEXTURE_TRANSFORM_EXT. The error INVALID_VALUE results if
- either ustride or vstride is less than k, or if u1 is equal to u2, or
- if v1 is equal to v2.
-
-
- Section 5.3 Feedback
-
- <amend bottom of paragraph 2>
-
- The texture coordinates and colors returned are these resulting from the
- clipping operations described in (section 2.13.8). Only one set of texture
- coordinates is returned even for implementations which support multiple
- texture coordinates. The texture coordinate set returned is the the one
- corresponding to the value of SELECTED_TEXTURE_TRANSFORM_EXT.
-
-
- Additions to Chapter 6 of the 1.1 Specification (State and State Requests)
-
- <add this paragraph after paragraph 14 regarding multi-valued state variables>
-
- When multiple textures are supported, most texture state variables are
- further qualified by the value of SELECTED_TEXTURE_TRANSFORM_EXT or
- SELECTED_TEXTURE_EXT to determine which server texture state vector is
- queried. Client texture state variables such as texture coordinate
- array pointers are qualified with SELECTED_TEXTURE_COORD_SET_EXT.
- Tables 6.5 through 6.22 indicate those state variables which are
- qualified by SELECTED_TEXTURE_TRANSFORM_EXT, SELECTED_TEXTURE_EXT or
- SELECTED_TEXTURE_COORD_SET_EXT during state queries.
-
- <add this paragraph after paragraph 16 regarding the TEXTURE_BIT>
-
- When multiple textures are supported, operations on groups containing
- replicated texture state push or pop all versions of texture state
- within that group. When server state for a group is pushed all state
- in the group corresponding to TEXTURE0_EXT is pushed first, followed by
- state corresponding to TEXTURE1_EXT, and so on up to and including the
- state corresponding to TEXTURE<n>_EXT where <n> is the value of
- max{MAX_TEXTURES_EXT, MAX_TEXTURE_COORD_SETS_EXT}. If state does
- not exist for an attribute (this can occur when MAX_TEXTURES_EXT is
- not equal to MAX_TEXTURE_COORD_SETS_EXT) then it is ignored.
- When server state for a group is popped the replicated texture state is
- restored in the opposite order that it was pushed, starting with state
- corresponding to TEXTURE<n>_EXT and ending with TEXTURE0_EXT.
- Identical rules are observed for client texture state push and pop
- operations.
-
- <rename vertex_array attribute group to vertex>
-
-
- Additions to the GLX Specification
-
- None
-
- GLX Protocol
-
- TBD
-
- Dependencies on EXT_texture3D
-
- If EXT_texture3D is not supported than the functionality and state
- associated with EXT_texture3D does not exist and is therefore not
- extended.
-
- Dependencies on SGIS_texture4D
-
- If SGIS_texture4D is not supported than the functionality and state
- associated with SGIS_texture4D does not exist and is therefore not
- extended.
-
- Dependencies on SGIS_texture_border_clamp
-
- If SGIS_texture_border_clamp is not supported than the functionality and
- state associated with SGIS_texture_border_clamp does not exist and is
- therefore not extended.
-
- Dependencies on SGI_texture_color_table
-
- If SGI_texture_color_table is not supported than the functionality and
- state associated with SGI_texture_color_table does not exist and is
- therefore not extended.
-
- Dependencies on SGIS_texture_edge_clamp
-
- If SGIS_texture_edge_clamp is not supported than the functionality and
- state associated with SGIS_texture_edge_clamp does not exist and is
- therefore not extended.
-
- Dependencies on SGIX_texture_add_env
-
- If SGIX_texture_add_env is not supported than the functionality and
- state associated with SGIX_texture_add_env does not exist and is
- therefore not extended.
-
- Dependencies on SGIS_texture_filter4
-
- If SGIS_texture_filter4 is not supported than the functionality and
- state associated with SGIS_texture_filter4 does not exist and is
- therefore not extended.
-
- Dependencies on SGIS_texture_lod
-
- If SGIS_texture_lod is not supported than the functionality and state
- associated with SGIS_texture_lod does not exist and is therefore not
- extended.
-
- Dependencies on SGIX_texture_lod_bias
-
- If SGIX_texture_lod_bias is not supported than the functionality and
- state associated with SGIX_texture_lod_bias does not exist and is
- therefore not extended.
-
- Dependencies on SGIX_texture_scale_bias
-
- If SGIX_texture_scale_bias is not supported than the functionality and
- state associated with SGIX_texture_scale_bias does not exist and is
- therefore not extended.
-
- Dependencies on SGIS_texture_select
-
- If SGIS_texture_select is not supported than the functionality and state
- associated with SGIS_texture_select does not exist and is therefore not
- extended.
-
- Dependencies on SGIS_detail_texture
-
- If SGIS_detail_texture is not supported than the functionality and state
- associated with SGIS_detail_texture does not exist and is therefore not
- extended.
-
- Dependencies on SGIS_sharpen_texture
-
- If SGIS_sharpen_texture is not supported than the functionality and
- state associated with SGIS_sharpen_texture does not exist and is
- therefore not extended.
-
- Dependencies on SGIX_shadow
-
- If SGIX_shadow is not supported than the functionality and state
- associated with SGIX_shadow does not exist and is therefore not
- extended.
-
- Dependencies on SGIX_shadow_ambient
-
- If SGIX_shadow_ambient is not supported than the functionality and state
- associated with SGIX_shadow_ambient does not exist and is therefore not
- extended.
-
- Dependencies on SGIX_clipmap
-
- If SGIX_clipmap is not supported than the functionality and state
- associated with SGIX_clipmap does not exist and is therefore not
- extended.
-
- Dependencies on SGIS_point_line_texgen
-
- If SGIS_point_line_texgen is not supported than the functionality and
- state associated with SGIS_point_line_texgen does not exist and is
- therefore not extended.
-
-
- Errors
-
- INVALID_ENUM is generated if SelectTextureEXT, SelectTextureTransformEXT,
- SelectTextureCoordSetEXT, MultiTexCoord<n>{T}[v], or MultiTexCoordPointer
- parameter <target> is not TEXTURE0_EXT .. TEXTURE3_EXT.
-
- INVALID_OPERATION is generated if SelectTextureCoordSetEXT or
- SelectTextureTransformEXT parameter <target> is one of TEXTURE0_EXT
- .. TEXTURE3_EXT and <target> is greater or equal than the number of
- available textures coordinate sets.
-
- INVALID_VALUE is generated if InterleavedTextureCoordSetsEXT parameter
- <factor> is not between 1 and MAX_TEXTURE_COORD_SETS_EXT.
-
- INVALID_OPERATION is generated if SelectTextureEXT parameter <target> is
- one of TEXTURE0_EXT .. TEXTURE3_EXT and <target> is greater or equal than
- the number of available textures.
-
- INVALID_ENUM is generated if TexEnv{T}[v] parameter <pname> is
- TEXTURE_ENV_COORD_SET_EXT and the <param> parameter is not one of
- TEXTURE0_EXT .. TEXTURE3_EXT.
-
- INVALID_OPERATION is generated if TexEnv{T}[v] parameter <pname>
- is TEXTURE_ENV_COORD_SET_EXT and the <param> parameter is greater or equal
- than the number of available textures coordinate sets.
-
- INVALID_OPERATION is generated if SelectTextureEXT or
- SelectTextureTransformEXT is executed between execution of Begin and the
- corresponding execution of End.
-
- INVALID_OPERATION is generated if SelectTextureCoordSetEXT or
- MultiTexCoordPointerEXT is executed between execution of Begin and the
- corresponding execution of End, but some implementations may not generate
- the error. In such cases the result of executing these commands is
- undefined.
-
- New State
-
- Get Value Get Command Type Initial Value Attribute
- --------- ----------- ---- ------------- ---------
- SELECTED_TEXTURE_EXT GetIntegerv Z4 TEXTURE0_EXT texture
- SELECTED_TEXTURE_TRANSFORM_EXT GetIntegerv Z4 TEXTURE0_EXT texture
- SELECTED_TEXTURE_COORD_SET_EXT GetIntegerv Z4 TEXTURE0_EXT vertex
- TEXTURE_COORD_SET_INTERLEAVE_FACTOR_EXT GetIntegerv Z4 1 vertex
-
- Replicated State
-
- Get Value Get Command Type Initial Value Attribute
- --------- ----------- ---- ------------- ---------
- x CURRENT_TEXTURE_COORDS GetFloatv 1* x T (0,0,0,1) current
- x CURRENT_RASTER_TEXTURE_COORDS GetFloatv 1* x T (0,0,0,1) current
-
- c TEXTURE_COORD_ARRAY IsEnabled 1* x B False vertex-array
- c TEXTURE_COORD_ARRAY_SIZE GetIntegerv 1* x Z+ 0 vertex-array
- c TEXTURE_COORD_ARRAY_TYPE GetIntegerv 1* x Z4 FLOAT vertex-array
- c TEXTURE_COORD_ARRAY_STRIDE GetIntegerv 1* x Z+ 0 vertex-array
- c TEXTURE_COORD_ARRAY_POINTER GetPointerv 1* x Y 0 vertex-array
-
- x TEXTURE_MATRIX GetFloatv 1* x 2* x M4 Identity -
- x TEXTURE_STACK_DEPTH GetIntegerv 1* x Z+ 1 -
-
- TEXTURE_1D IsEnabled 1* x B False texture/enable
- TEXTURE_2D IsEnabled 1* x B False texture/enable
- TEXTURE_3D_EXT IsEnabled 1* x B False texture/enable
- TEXTURE_4D_SGIS IsEnabled 1* x B False texture/enable
- TEXTURE_BINDING_1D GetIntegerv 1* x Z+ 0 texture
- TEXTURE_BINDING_2D GetIntegerv 1* x Z+ 0 texture
- TEXTURE_BINDING_3D_EXT GetIntegerv 1* x Z+ 0 texture
- TEXTURE_BINDING_4D_SGIS GetIntegerv 1* x Z+ 0 texture
- TEXTURE GetTexImage 1* x n x I see sec 3.8 -
- TEXTURE_WIDTH GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_HEIGHT GetTexLevelParameter 1* x n x Z+ 0 -
- +TEXTURE_DEPTH_EXT GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_BORDER GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_INTERNAL_FORMAT GetTexLevelParameter 1* x n x Z+ 0 -
- (TEXTURE_COMPONENTS)
- TEXTURE_RED_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_GREEN_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_BLUE_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_ALPHA_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_LUMINANCE_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_INTENISTY_SIZE GetTexLevelParameter 1* x n x Z+ 0 -
- TEXTURE_BORDER_COLOR GetTexParameter 1* x 2+ x C (0,0,0,0) texture
- TEXTURE_MIN_FILTER GetTexParameter 1* x 2+ x Z6 see sec 3.8 texture
- TEXTURE_MAG_FILTER GetTexParameter 1* x 2+ x Z2 see sec 3.8 texture
- TEXTURE_WRAP_S GetTexParameter 1* x 2+ x Z2 REPEAT texture
- TEXTURE_WRAP_T GetTexParameter 1* x 2+ x Z2 REPEAT texture
- +TEXTURE_WRAP_R_EXT GetTexParameter 1* x 2+ x Z2 REPEAT texture
- +TEXTURE_WRAP_Q_SGIS GetTexParameter 1* x 2+ x Z2 REPEAT texture
- TEXTURE_PRIORITY GetTexParameterfv 1* x 2+ x R[0,1] 1 texture
- TEXTURE_RESIDENT GetTexParameterfv 1* x 2+ x B False texture
-
- +TEXTURE_MIN_LOD_SGIS GetTexParameterfv 1* x n x R -1000 texture
- +TEXTURE_MAX_LOD_SGIS GetTexParameterfv 1* x n x R 1000 texture
- +TEXTURE_BASE_LEVEL_SGIS GetTexParameteriv 1* x n x R 0 texture
- +TEXTURE_MAX_LEVEL_SGIS GetTexParameteriv 1* x n x R 1000 texture
-
- +TEXTURE_LOD_BIAS_S_SGIX GetTexParameterfv 1* x n x R 0 texture
- +TEXTURE_LOD_BIAS_T_SGIX GetTexParameterfv 1* x n x R 0 texture
- +TEXTURE_LOD_BIAS_R_SGIX GetTexParameterfv 1* x n x R 0 texture
-
- +TEXTURE_FILTER4_FUNC_SGIS GetTexFilterFuncSGIS 1* x 2 x Size x R see text texture
-
- +DETAIL_TEXTURE_2D_BINDING_SGIS GetIntegerv 1* x Z+ 0 texture
- +DETAIL_TEXTURE_LEVEL_SGIS GetTexParameteriv 1* x n x Z- -4 texture
- +DETAIL_TEXTURE_MODE_SGIS GetTexParameteriv 1* x n x Z2 ADD texture
- +DETAIL_TEXTURE_FUNC_POINTS_SGIS GetTexParameteriv 1* x n x Z+ 2 texture
- +<DETAIL_TEXTURE_FUNC> GetDetailTexFuncSGIS 1* x n x m x R {0, 0}, {-4, 1} texture
-
- +SHARPEN_TEXTURE_FUNC_POINTS_SGIS GetTexParameteriv 1* x n x Z+ 2 texture
- +<SHARPEN_TEXTURE_FUNC> GetSharpenTexFuncSGIS 1* x n x m x R {0, 0}, {-4, 1} texture
-
- +TEXTURE_COMPARE_SGIX GetTexParameter[if]v 1* x B False texture
- +TEXTURE_COMPARE_OPERATOR_SGIX GetTexParameter[if]v 1* x Z_2 TEXTURE_LEQUAL_R_SGIX texture
-
- +SHADOW_AMBIENT_SGIX GetTexParameter[if]v 1* x R[0,1] 0.0 texture
-
- +TEXTURE_CLIPMAP_FRAME_SGIX GetTexParameterf 1* x Z+ 0 texture
- +TEXTURE_CLIPMAP_CENTER_SGIX GetTexParameterfv 1* x 2 x Z+ 0,0 texture
- +TEXTURE_CLIPMAP_OFFSET_SGIX GetTexParameterfv 1* x 2 x Z+ 0,0 texture
- +TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX GetTexParameterfv 1* x 3 x Z+ 0,0,0 texture
-
- +DUAL_TEXTURE_SELECT_SGIS GetTexParameter 1* x n x 3 x Z2 0 texture
- +QUAD_TEXTURE_SELECT_SGIS GetTexParameter 1* x n x 3 x Z4 0 texture
-
- +POST_TEXTURE_FILTER_BIAS_SGIX GetTexParameterfv 1* x n x 4 x R (0,0,0,0) texture
- +POST_TEXTURE_FILTER_SCALE_SGIX GetTexParameterfv 1* x n x 4 x R (1,1,1,1) texture
-
- TEXTURE_COLOR_TABLE_SGI IsEnabled B False texture/enable
- +COLOR_TABLE GetColorTableSGI 4 x I empty -
- +COLOR_TABLE_FORMAT_SGI GetColorTableParameterivSGI 2 x 4 x Z38 RGBA -
- +COLOR_TABLE_WIDTH_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_RED_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_GREEN_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_BLUE_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_ALPHA_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_LUMINANCE_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_INTENSITY_SIZE_SGI GetColorTableParameterivSGI 2 x 4 x Z+ 0 -
- +COLOR_TABLE_SCALE_SGI GetColorTableParameterfvSGI 4 x R4 (1,1,1,1) pixel
- +COLOR_TABLE_BIAS_SGI GetColorTableParameterfvSGI 4 x R4 (0,0,0,0) pixel
-
- TEXTURE_ENV_MODE GetTexEnviv 1* x Z4 MODULATE texture
- TEXTURE_ENV_COLOR GetTexEnviv 1* x C (0,0,0,0) texture
- TEXTURE_ENV_COORD_SET_EXT GetTexEnviv 1* x Z4 see sec 3.8 texture
- x TEXTURE_GEN_x IsEnabled 1* x 4 x B False texture/enable
- x EYE_PLANE GetTexGenfv 1* x 4 x R4 see sec 2.10.4 texture
- x OBJECT_PLANE GetTexGenfv 1* x 4 x R4 see sec 2.10.4 texture
- x TEXTURE_GEN_MODE GetTexGeniv 1* x 4 x Z3 EYE_LINEAR texture
-
- +TEXTURE_ENV_BIAS_SGIX GetFloatv 1* x C (0,0,0,0) texture
-
- x+EYE_POINT_SGIS GetTexGeniv 1* x 4 x R (0,0,0,1) texture
- x+OBJECT_POINT_SGIS GetTexGeniv 1* x 4 x R (0,0,0,1) texture
- x+EYE_LINE_SGIS GetTexGeniv 1* x 7 x R (0,0,0,1,0,0,1) texture
- x+OBJECT_LINE_SGIS GetTexGeniv 1* x 7 x R (0,0,0,1,0,0,1) texture
-
- x ORDER GetMapiv (k+9) x Z8* 1 -
- x ORDER GetMapiv (k+9) x 2 x Z8* 1,1 -
- x COEFF GetMapfv (k+9) x 8* x Rn see sec 5.1 -
- x COEFF GetMapfv (k+9) x 8* x 8* x Rn see sec 5.1 -
- x DOMAIN GetMapfv (k+9) x 2 x R see sec 5.1 -
- x DOMAIN GetMapfv (k+9) x 4 x R see sec 5.1 -
- x MAP1_x IsEnabled (k+9) x B False -
- x MAP2_x IsEnabled (k+9) x B False -
-
- + = state defined in another extension.
- x = state qualified by SELECTED_TEXTURE_TRANSFORM_EXT
- c = state qualified by SELECTED_TEXTURE_COORD_SET_EXT
-
- New Implementation Dependent State
-
- Get Value Get Command Type Minimum Value
- --------- ----------- ---- -------------
- MAX_TEXTURES_EXT GetIntegerv Z+ 1
- MAX_TEXTURE_COORD_SETS_EXT GetIntegerv Z+ 1
-